package two.chapter_1.c1_1;

import edu.princeton.cs.algs4.StdOut;

import java.util.concurrent.Callable;

public class Ex1_1_7 {
    /**
     * 斐波那契数列
     *0  1   1    2   3  5   8  13   21   34    55  89  144  233   377  610
     * F(n)=F(n-1)+F(n-2)
     * @param args
     */
    public static void main(String [] args){

        a();
        b();
        c();
    }

    /**
     * 首先得认出这是一个牛顿迭代法: X(n+1)=Xn-f(Xn)/f'(Xn);
     * 这里的f(x)=x^2-c ;这是常数C的开方求法
     *
     * 所以X(n+1)=(Xn+c/Xn)/2
     *
     * 所以下方的输出应该接近 3.0
     */
    private static void a() {
        double t=9.0;
        while(Math.abs(t-9.0/t)>.001){
            t=(9.0/t+t)/2.0;   //除数是2，所以应该是x^2,只有这样导数后才有2
        }
        StdOut.printf("%.5f\n",t);
    }


    private static void b(){
        int sum=0;
        for (int i=1;i<1000;i++){
            for (int j=0;j<1000;j++){//999*1000=999000
                sum++;
            }
        }
        StdOut.println(sum);
    }

    private static void c(){
        int sum=0;
        for (int i=1;i<1000;i*=2){//通项公式：an=2^(n-1)   an<1000  ->  n=10
            for (int j=0;j<1000;j++){//10*1000=10000
                sum++;
            }
        }
        StdOut.println(sum);
    }
}
